// 邮箱注册  接口

const db = require('../db')

// 引入 bcryptjs进行密码加密
const bcrypt = require('bcryptjs')

// 验证验证码是否写对
exports.post = (req, res) => {
  // console.log(req.body)
  const { email, password, code, time } = req.body
  // console.log(time)
  // 判断用户是否点了发送验证码(数据库里面有没有 => 用户的邮箱 和 验证码)
  const selEmailSql = 'select * from users where email=?'
  db.query(selEmailSql, email, (err, results) => {
    if (err) return console.log('查询用户是否发送验证码sql执行失败')
    if (results.length < 1) {
      // 数据库里面没有该用户 => (用户未点发送验证码) => 返回(验证码错误)
      res.send({
        status: 401,
        mes: '验证码错误！'
      })
    } else {
      // 数据库里面有该用户 => (用户点了发送验证码) => 后续 => 校验 验证码
      const checkcodeSql = 'select code from users where email=?'
      db.query(checkcodeSql, email, (err, results) => {
        if (results[0].code === null) {
          res.send({
            status: 403,
            mes: '该账户已经注册了'
          })
        } else {
          const compareResult = bcrypt.compareSync(code, results[0].code)
          // console.log('-------', results[0].code)
          // console.log(code)
          // console.log(compareResult)
          // if (err) return res.send(err)
          if (err) return console.log(err)
          // if (results.length < 0) return res.send('用户查找失败！')
          // if (results.length < 0) return console.log('验证码查找失败！')
          if (compareResult === false) {
            res.send({
              status: 401,
              mes: '验证码错误！'
            })
          } else {
            // 若验证码正确之后，需要判断 邮箱是否被占用(判断邮箱是否有密码/没有密码就是没有注册成功)
            // 根据 邮箱 查询 密码
            const slePwdSql = `select password from users where email='${email}'`
            db.query(slePwdSql, (err, results) => {
              if (err) return console.log(err, 'selPwdSql语句执行失败')
              // console.log(results.length)
              // console.log(results[0].password)
              if (results[0].password === null) {
                console.log('该邮箱没有被注册(该邮箱没有密码)')
                // 将用户密码添加/更新到数据库
                const addUserSql = `update users set password='${password}',time='${time}' where email='${email}'`
                db.query(addUserSql, function (err, results) {
                  // console.log(results)
                  // 执行sql语句失败
                  // if (err) return res.send(err.message)
                  if (err) {
                    return console.log(err)
                  } else if (results.affectedRows !== 1) {
                    // sql语句执行成功，但影响行不为1
                    res.send({
                      status: 402,
                      message: '注册用户失败，请稍后再试'
                    })
                  } else {
                    // sql语句执行成功, 用户密码加入数据库
                    res.send({
                      status: 201,
                      message: '注册用户成功!'
                    })
                    // 注册成功
                    // 若验证码正确之后，需要将数据库中的验证码清除
                    const clearcodedSql = 'update users set code=null where email=?'
                    db.query(clearcodedSql, email, (err, results) => {
                      // console.log(results)
                      if (err) {
                        // return res.send(err)
                        console.log(err)
                      } else if (results.affectedRows !== 1) {
                        // return res.send({ status: 401, mes: '验证码清除失败！' })
                        return console.log('验证码清除失败')
                      }
                    })
                  }
                })

                // 该邮箱没有注册(该邮箱没有密码)  =>  数据库 删除 该账号
                // const delEmailSql = `delete from users where email='${email}'`
                // db.query(delEmailSql, (err, results) => {
                //   console.log(results)
                //   if (err) {
                //     console.log(err, 'delEmailSql语句执行失败')
                //   } else if (results.affectedRows !== 1) {
                //     console.log('delEmailSql删除失败')
                //   } else {
                //     console.log('delEmailSql删除成功!!!')
                //   }
                // })
              } else {
                // 该邮箱有注册了(该邮箱有密码)  =>  数据库 更新 该账号密码
                console.log('该邮箱有密码')
                // 判断该邮箱有密码后,也需要将 验证码 清除
                const clearcodedSql = 'update users set code=null where email=?'
                db.query(clearcodedSql, email, (err, results) => {
                  // console.log(results)
                  if (err) {
                    // return res.send(err)
                    console.log(err)
                  } else if (results.affectedRows !== 1) {
                    // return res.send({ status: 401, mes: '验证码清除失败！' })
                    return console.log('验证码清除失败')
                  }
                })
                res.send({
                  status: 403,
                  mes: '该账户已经注册了'
                })
              }
            })
          }
        }
      })
    }
  })
}
